package com.hanyxx.coll;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * @author layman
 * @date 2021/2/25
 */
public class Demo04 {
    public static void main(String[] args) {
        //自定义排序规则第一种方式：传递Comparator匿名对象
        TreeSet<Integer> ts = new TreeSet<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                //默认升序排序
                //return o1 - o2; //[-27, -4, 3, 15, 69]
                //降序排序
                return o2 - o1;  //[69, 15, 3, -4, -27]
            }
        });
        ts.add(15);
        ts.add(3);
        ts.add(-27);
        ts.add(69);
        ts.add(-4);
        System.out.println(ts);

        //自定义排序规则第二种方式：集合内存储的对象实现Comparable接口，并重写其compareTo方法
        TreeSet<Hero> ts2 = new TreeSet<>();
        Hero h1 = new Hero("钢铁侠",38);
        Hero h2 = new Hero("蜘蛛侠",18);
        Hero h3 = new Hero("雷神",1500);
        ts2.add(h1);
        ts2.add(h2);
        ts2.add(h3);
        System.out.println(ts2);
    }
}
@Data
@AllArgsConstructor
class Hero implements  Comparable<Hero>{

    private String name;
    private Integer age;

    //实现自定义排序规则
    @Override
    public int compareTo(Hero o) {
        //升序
        //return this.age - o.age;  //[Hero(name=蜘蛛侠, age=18), Hero(name=钢铁侠, age=38), Hero(name=雷神, age=1500)]
        //降序
        return o.age - this.age;  //[Hero(name=雷神, age=1500), Hero(name=钢铁侠, age=38), Hero(name=蜘蛛侠, age=18)]
    }
}
